package gcp.gui.modelos;

import gcp.Amigo;
import java.util.ArrayList;
import java.util.List;
import javax.swing.table.AbstractTableModel;

/**
 * AmigosDoUsuarioTableModel<br>
 * Modelo para criacao de tabelas para exibicao de Amigos do Usuario.
 * @author Hildegard Naara Furtado da Costa.
 */
public class AmigosDoUsuarioTableModel extends AbstractTableModel {

    private static final long serialVersionUID = 1L;

    private List<Amigo> amigos;

    public static final int NOME = 0;
    public static final int SOBRENOME = 1;
    public static final int SEXO = 2;

    /**
     * Construtor default.
     */
    public AmigosDoUsuarioTableModel() {
        amigos = new ArrayList<Amigo>();
    }

    /**
     * Retorna o numero de colunas da AmigosDoUsuarioTableModel.
     * @return Numero de colunas da AmigosDoUsuarioTableModel.
     */
    public int getColumnCount() {
        return 3;
    }

    /**
     * Retorna o numero de linhas da AmigosDoUsuarioTableModel.
     * @return Numero de linhas da AmigosDoUsuarioTableModel.
     */
    public int getRowCount() {
        return amigos.size();
    }

    /**
     * Retorna o valor da celula na posicao indicada na
     * AmigosDoUsuarioTableModel.
     * @param linha Numero da linha na AmigosDoUsuarioTableModel.
     * @param coluna Numero da coluna na AmigosDoUsuarioTableModel.
     * @return Valor da celula na AmigosDoUsuarioTableModel.
     */
    public Object getValueAt(int linha, int coluna) {
        Amigo amigo = get(linha);
        switch (coluna) {
        case NOME:
            return amigo.getNome();
        case SOBRENOME:
            return amigo.getSobrenome();
        case SEXO:
            return amigo.getSexo();
        }
        return null;
    }

    /**
     * Retorna o nome da coluna indicada na AmigosDoUsuarioTableModel.
     * @param coluna Numero da coluna na AmigosDoUsuarioTableModel.
     * @return Nome da coluna na AmigosDoUsuarioTableModel.
     */
    @Override
    public String getColumnName(int coluna) {
        switch (coluna) {
        case NOME:
            return "Nome";
        case SOBRENOME:
            return "Sobrenome";
        case SEXO:
            return "Sexo";
        }
        return "";
    }

    /**
     * Retorna o Amigo da linha indicada na AmigosDoUsuarioTableModel.
     * @param linha Numero da linha na AmigosDoUsuarioTableModel.
     * @return amigo Amigo.
     */
    public Amigo get(int linha) {
        return amigos.get(linha);
    }

    /**
     * Retorna a lista de Amigos em exibicao na AmigosDoUsuarioTableModel.
     * @return Lista de Amigos.
     */
    public List<Amigo> getAmigos() {
        return amigos;
    }

    /**
     * Define a lista de amigos a serem exibidos na AmigosDoUsuarioTableModel.
     * @param amigos Lista de amigos.
     */
    public void setAmigos(List<Amigo> amigos) {
        if (amigos != null)
            this.amigos = amigos;
        // Avisa a interface que a lista de amigos foi alterada.
        fireTableDataChanged();
    }
}
